﻿#region License

//===================================================================================
//Copyright 2010 HexaSystems Corporation
//===================================================================================
//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//http://www.apache.org/licenses/LICENSE-2.0
//===================================================================================
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
//===================================================================================

#endregion

using System;
using System.Linq;

using Raven.Client;
using Raven.Client.Document;

using Hexa.Core.Database;

namespace Hexa.Core.Domain
{
    public class RavenContextFactory : IUnitOfWorkFactory, IDatabaseManager
    {
        private static DocumentStore _documenFactory;

        public RavenContextFactory()
        {
            if (_documenFactory == null)
            {
                _documenFactory = new DocumentStore() { DataDirectory = "Data" };
                _documenFactory.Initialize();
            }
        }

        public IUnitOfWork Create()
        {
            return new RavenContext(_documenFactory.OpenSession());
        }

        // Registers Raven IDocumentStore for testing purposes.
        public void RegisterSessionFactory(IoCContainer container)
        {
            container.RegisterInstance<IDocumentStore>(_documenFactory);        
        }

        public bool DatabaseExists()
        {
            return false;
        }

        public void CreateDatabase()
        {
            
        }

        public void ValidateDatabaseSchema()
        {
            
        }

        public void DeleteDatabase()
        {
            
        }
    }
}
